/*
 *  Filename: mpu6050.h
 *  Function: Header for Sensor MPU6050
 *  Created: 2017-06-14
 *  Version: 1.0
 *  Author: Bin
 */

#ifndef MPU6050_H
#define MPU6050_H

/*-------- Defines --------*/
#define MPU6050_PI 3.14

#define MPU6050_ADDR    0xD0    // IIC写入时的地址字节数据，+1为读取

#define SMPLRT_DIV      0x19    // 陀螺仪采样率，典型值：0x07(125Hz)
#define CONFIG          0x1A    // 低通滤波频率，典型值：0x06(5Hz)
#define GYRO_CONFIG     0x1B    // 陀螺仪自检及测量范围，典型值：0x18(不自检，2000deg/s)
#define ACCEL_CONFIG    0x1C    // 加速计自检、测量范围及高通滤波频率，典型值：0x01(不自检，2G，5Hz)
#define ACCEL_XOUT_H    0x3B
#define ACCEL_XOUT_L    0x3C
#define ACCEL_YOUT_H    0x3D
#define ACCEL_YOUT_L    0x3E
#define ACCEL_ZOUT_H    0x3F
#define ACCEL_ZOUT_L    0x40
#define TEMP_OUT_H      0x41
#define TEMP_OUT_L      0x42
#define GYRO_XOUT_H     0x43
#define GYRO_XOUT_L     0x44
#define GYRO_YOUT_H     0x45
#define GYRO_YOUT_L     0x46
#define GYRO_ZOUT_H     0x47
#define GYRO_ZOUT_L     0x48
#define PWR_MGMT_1      0x6B    // 电源管理，典型值：0x00(正常启用)
#define WHO_AM_I        0x75    // IIC地址寄存器(默认数值0x68，只读)

/*-------- Types --------*/
typedef struct {
    float ACC_X;    // Acceleration of X Axis
    float ACC_Y;    // Acceleration of Y Axis
    float ACC_Z;    // Acceleration of Z Axis
    float GYR_X;    // Angular velocity of X Axis
    float GYR_Y;    // Angular velocity of Y Axis
    float GYR_Z;    // Angular velocity of Z Axis
    double Roll;     // Roll Angle
    double Pitch;    // Pitch Angle
} MPU6050_t;

/*-------- Exported functions --------*/
void MPU6050_Init(void);
void MPU6050_Update(MPU6050_t *p);

#endif
